home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 7 / Apprentice-Release7.iso / Source Code / Pascal / Snippets / PNL Libraries / MyErrorStrings.p < prev    next >
Encoding:
Text File  |  1996-08-05  |  1.1 KB  |  59 lines  |  [TEXT/CWIE]

  1. unit MyErrorStrings;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types;
  7.  
  8.     function ErrorStr (id: integer; err: OSStatus): Str255;
  9.     function ErrorString (id: integer; err: OSStatus; var e: Str255): boolean;
  10.  
  11. implementation
  12.  
  13.     uses
  14.         Memory, TextUtils, Resources;
  15.  
  16.     function ErrorString (id: integer; err: OSStatus; var e: Str255): boolean;
  17.         var
  18.             h: Handle;
  19.             s, n: Str255;
  20.             left: longint;
  21.             oe: OSErr;
  22.             p: Ptr;
  23.             len: integer;
  24.     begin
  25.         ErrorString := false;
  26.         NumToString(err, n);
  27.         e := n;
  28.         h := GetResource('ERRS', id);
  29.         if (h <> nil) & (h^ <> nil) then begin
  30.             HNoPurge(h);
  31.             left := GetHandleSize(h);
  32.             p := h^;
  33.             while (left > 3) do begin
  34.                 BlockMoveData(p, @oe, 2);
  35.                 p := Ptr(ord(p) + 2);
  36.                 len := BAND(p^, $FF);
  37.                 BlockMoveData(p, @s, len + 1);
  38.                 p := Ptr(ord(p) + len + 1);
  39.                 if err = oe then begin
  40.                     e := s;
  41.                     ErrorString := true;
  42.                     leave;
  43.                 end;
  44.                 left := left - (2 + 1 + len);
  45.             end;
  46.             HPurge(h);
  47.         end;
  48.     end;
  49.  
  50.     function ErrorStr (id: integer; err: OSStatus): Str255;
  51.         var
  52.             dummy: boolean;
  53.             e: Str255;
  54.     begin
  55.         dummy := ErrorString(id, err, e);
  56.         ErrorStr := e;
  57.     end;
  58.  
  59. end.